package org.ovirt.engine.ui.webadmin.plugin.entity;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.AuditLog;
import org.ovirt.engine.core.common.businessentities.BusinessEntity;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.IVdcQueryable;
import org.ovirt.engine.core.common.businessentities.Provider;
import org.ovirt.engine.core.common.businessentities.Quota;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
import org.ovirt.engine.core.common.businessentities.StoragePool;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmPool;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.core.common.businessentities.storage.Disk;
import org.ovirt.engine.ui.webadmin.plugin.jsni.JsMutableObjectWithProperties;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
/**
* Overlay type representing a business entity passed through plugin API as native JS object.
*/
public final class EntityObject extends JsMutableObjectWithProperties {
protected EntityObject() {
}
protected static <T> EntityObject create(T businessEntity) {
EntityObject obj = JavaScriptObject.createObject().cast();
String entityId = ""; //$NON-NLS-1$
if (businessEntity instanceof BusinessEntity) {
entityId = ((BusinessEntity<?>) businessEntity).getId().toString();
} else if (businessEntity instanceof IVdcQueryable) {
entityId = ((IVdcQueryable) businessEntity).getQueryableId().toString();
}
obj.setValueAsString("id", entityId); //$NON-NLS-1$
return obj;
}
// TODO(vszocs) refactor if-else & instanceof code, logic that fills
// entity-specific properties should be tied with EntityType enum
public static <T> EntityObject from(T businessEntity) {
EntityObject obj = create(businessEntity);
// DataCenter
if (businessEntity instanceof StoragePool) {
obj.setValueAsString("name", ((StoragePool) businessEntity).getName()); //$NON-NLS-1$
}
// Cluster
else if (businessEntity instanceof Cluster) {
obj.setValueAsString("name", ((Cluster) businessEntity).getName()); //$NON-NLS-1$
}
// Host
else if (businessEntity instanceof VDS) {
obj.setValueAsString("name", ((VDS) businessEntity).getName()); //$NON-NLS-1$
obj.setValueAsString("hostname", ((VDS) businessEntity).getHostName()); //$NON-NLS-1$
}
// Network
else if (businessEntity instanceof Network) {
obj.setValueAsString("name", ((Network) businessEntity).getName()); //$NON-NLS-1$
}
// Storage
else if (businessEntity instanceof StorageDomain) {
obj.setValueAsString("name", ((StorageDomain) businessEntity).getStorageName()); //$NON-NLS-1$
}
// Disk
else if (businessEntity instanceof Disk) {
// No custom properties for now
}
// VirtualMachine
else if (businessEntity instanceof VM) {
obj.setValueAsString("name", ((VM) businessEntity).getName()); //$NON-NLS-1$
obj.setValueAsString("ipaddress", ((VM) businessEntity).getIp()); //$NON-NLS-1$
obj.setValueAsString("status", ((VM) businessEntity).getStatus().name()); //$NON-NLS-1$
}
// Pool
else if (businessEntity instanceof VmPool) {
obj.setValueAsString("name", ((VmPool) businessEntity).getName()); //$NON-NLS-1$
}
// Template
else if (businessEntity instanceof VmTemplate) {
obj.setValueAsString("name", ((VmTemplate) businessEntity).getName()); //$NON-NLS-1$
}
// GlusterVolume
else if (businessEntity instanceof GlusterVolumeEntity) {
obj.setValueAsString("name", ((GlusterVolumeEntity) businessEntity).getName()); //$NON-NLS-1$
obj.setValueAsString("clusterId", ((GlusterVolumeEntity) businessEntity).getClusterId().toString());//$NON-NLS-1$
}
// Provider
else if (businessEntity instanceof Provider) {
obj.setValueAsString("name", ((Provider) businessEntity).getName()); //$NON-NLS-1$
}
// User
else if (businessEntity instanceof DbUser) {
obj.setValueAsString("username", ((DbUser) businessEntity).getLoginName()); //$NON-NLS-1$
obj.setValueAsString("domain", ((DbUser) businessEntity).getDomain()); //$NON-NLS-1$
}
// Quota
else if (businessEntity instanceof Quota) {
obj.setValueAsString("name", ((Quota) businessEntity).getQuotaName()); //$NON-NLS-1$
}
// Event
else if (businessEntity instanceof AuditLog) {
obj.setValueAsString("correlationId", ((AuditLog) businessEntity).getCorrelationId()); //$NON-NLS-1$
obj.setValueAsString("message", ((AuditLog) businessEntity).getMessage()); //$NON-NLS-1$
obj.setValueAsString("callStack", ((AuditLog) businessEntity).getCallStack()); //$NON-NLS-1$
obj.setValueAsString("customEventId", String.valueOf(((AuditLog) businessEntity).getCustomEventId())); //$NON-NLS-1$
obj.setValueAsString("toString", ((AuditLog) businessEntity).toStringForLogging()); //$NON-NLS-1$
}
return obj;
}
public static <T> JsArray<EntityObject> arrayFrom(List<T> businessEntityList) {
JsArray<EntityObject> result = JavaScriptObject.createArray().cast();
for (T businessEntity : businessEntityList) {
result.push(EntityObject.from(businessEntity));
}
return result;
}
}